package com.caregiver.watch.business.data.dao;

import com.caregiver.watch.business.data.model.po.DeviceCallRecords;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 设备通话记录DAO接口
 */
@Mapper
public interface DeviceCallRecordsDao {
    
    /**
     * 插入通话记录
     * @param record 通话记录实体
     * @return 插入记录数
     */
    int insert(DeviceCallRecords record);
    
    /**
     * 根据ID更新通话记录
     * @param record 通话记录实体
     * @return 更新记录数
     */
    int updateById(DeviceCallRecords record);
    
    /**
     * 根据ID删除通话记录
     * @param id 记录ID
     * @return 删除记录数
     */
    int deleteById(Long id);
    
    /**
     * 根据ID查询通话记录
     * @param id 记录ID
     * @return 通话记录实体
     */
    DeviceCallRecords findById(Long id);
    
    /**
     * 根据用户ID和设备UUID查询通话记录
     * @param userId 用户ID
     * @param deviceUuid 设备UUID
     * @return 通话记录列表
     */
    List<DeviceCallRecords> findByUserIdAndDeviceUuid(@Param("userId") Long userId, @Param("deviceUuid") String deviceUuid);
    
    /**
     * 根据时间范围查询通话记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 通话记录列表
     */
    List<DeviceCallRecords> findByTimeRange(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
    
    /**
     * 根据用户ID、设备UUID和时间范围查询通话记录
     * @param userId 用户ID
     * @param deviceUuid 设备UUID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 通话记录列表
     */
    List<DeviceCallRecords> findByUserIdAndDeviceUuidAndTimeRange(
            @Param("userId") Long userId, 
            @Param("deviceUuid") String deviceUuid, 
            @Param("startTime") LocalDateTime startTime, 
            @Param("endTime") LocalDateTime endTime);


    /**
     * 批量保存数据
     */
    int batchInsert(List<DeviceCallRecords> records);
}
